package com.bonuo.crm.util;

import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;

public class ProjectBigDecimalUtil {
    /**
     * 累加列表中对象的BigDecimal字段（自动忽略null）
     * @param list 数据列表
     * @param extractor 字段提取器（如Project::getAmount）
     * @return 累加结果（默认0）
     */
    public static <T> BigDecimal sumBigDecimal(List<T> list, Function<T, BigDecimal> extractor) {
        return list.stream()
                .map(extractor)
                .filter(Objects::nonNull)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
    }

    /**
     * 对列表进行内存分页（适合数据量不大的场景）
     * @param list 原始列表
     * @param pageNum 页码（null则返回全部）
     * @param pageSize 每页条数（null则返回全部）
     * @return 分页后的列表
     */
    public static <T> List<T> paginateList(List<T> list, Integer pageNum, Integer pageSize) {
        if (pageNum == null || pageSize == null) {
            return list; // 不分页，返回全部
        }
        int start = (pageNum - 1) * pageSize;
        int end = Math.min(start + pageSize, list.size());
        return start >= list.size() ? Collections.emptyList() : list.subList(start, end);
    }


    public static <T> T defaultIfNull(T obj, T defaultValue) {
        return obj != null ? obj : defaultValue;
    }
}
